/*****************************************************************************
 *                     Projet de HCR : Annuaire distribué                    *
 *                      Guillaume MONTAVON (Master 2 RIM)                    *
 *                                                                           *
 *       Classe Annuaire : Possède une liste de noms qui sont associés       *
 *               avec l'adresse IP du client qui les connaît                 *
 *  Possède les méthodes qui permettent de modifier ou d'afficher ces infos  *
 *****************************************************************************/

import java.io.*;
import java.util.*;


public class Annuaire {

	private Map<String, String> annuaire;
	
	public Annuaire() {
		
		annuaire = new HashMap<String, String>();
		
		importer("sauvegardeAnnuaire.txt");
		
	}
	
	// Importe dans un fichier texte la liste de noms et d'adresses IP
	public void importer(String fichier) {
		
		try {
			File f = new File (fichier);
			FileReader fr = new FileReader (f);
			BufferedReader br = new BufferedReader (fr);
			
			try {
				String line = br.readLine();
				
				while (line != null) {
					String[] liste = line.split("\t");
					enregistrementAnnuaire(liste[0], liste[1]);
					line = br.readLine();
				}
				
				br.close();
				fr.close();
			}
			catch (IOException exception) {
				System.out.println("Erreur lors de la lecture : " + exception.getMessage());
			}
		}
		catch (FileNotFoundException exception) {
			System.out.println("Le fichier n'a pas été trouvé");
		}
		
	}
	
	// Enregistre dans un fichier texte la liste de noms et d'adresses IP
	public void exporter(String fichier) {
		
		try {
			PrintWriter out  = new PrintWriter(new FileWriter(fichier));
			
			Set cles = annuaire.keySet();
			Iterator it = cles.iterator();
			while (it.hasNext()) {
				String cle = (String) it.next(); // on peux typer plus finement ici
				out.println(cle + "\t" + (String) annuaire.get(cle));
			}
			out.close();
		}
		catch(Exception e) {
			e.printStackTrace();
		}
		
	}
	
	// Affiche la liste des noms et d'adresses IP que connait le serveur
	public void afficher() {
		
		Set cles = annuaire.keySet();
		Iterator it = cles.iterator();
		System.out.println("#######################################################");
		System.out.println("####### Contenu de la base de données du serveur ######");
		System.out.println("#######################################################");
		while (it.hasNext()) {
			String cle = (String) it.next(); // on peux typer plus finement ici
			System.out.println(cle + " : " + (String) annuaire.get(cle));
		}
		System.out.println();
		
	}
	
	// Retourne l'adresse IP du client qui connaît le nom demandé
	public String getIpByName(String nom) {
		if(!annuaire.containsKey(nom))
			return "inconnu";
		else
			return (String)annuaire.get(nom);
	}
	
	// Enregistre dans l'annauire un nom et une adresse IP
	public void enregistrementAnnuaire(String nom, String adresseIP) {
		annuaire.put(nom, adresseIP);
		exporter("sauvegardeAnnuaire.txt");
	}
	
	// Supprime dans l'annauire un nom
	public void suppressionAnnuaire(String nom) {
		annuaire.remove(nom);
		exporter("sauvegardeAnnuaire.txt");
	}
	
	// Obtenir la taille de l'annuaire
	public int getTaille() {
		return annuaire.size();
	}
	
}
